home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
FM Towns: Free Software Collection 10
/
FM Towns Free Software Collection 10.iso
/
ms_dos
/
tool
/
dprint
/
dpothers.c
< prev
next >
Wrap
Text File
|
1995-01-04
|
4KB
|
178 lines
/*
8086|Printman/POSTCARD 「その他」メニューモジュール
Copyright (c) 1993,94 Delmonta
*/
#include<dos.h>
#include<string.h>
#include<jstring.h>
#include<stdlib.h>
#include<errno.h>
#include"dprint.h"
#define DFLVER_MAJOR 1
#define DFLVER_MINOR 0
static char Dfl_header[] = "8086|Printman/POSTCARD デフォルト設定ファイル"
" Version ";
static char Dflver_str[] = "1.00\x1a";
char Dflfilename[64];
/*---------------------------------------------------------------------------*/
static bool dp_writedefault(void)
{
FILE *fp = fopen(Dflfilename,"wb");
if (fp==NULL)
{
dp_errmes("定義ファイルがオープンできません");
return FALSE;
}
/* -1するのは文字列末の'\0'の分 */
if (fwrite(Dfl_header,sizeof(char),sizeof(Dfl_header)-1,fp)==0)
goto wdfl_errexit;
if (fwrite(Dflver_str,sizeof(char),sizeof(Dflver_str)-1,fp)==0)
goto wdfl_errexit;
if (fwrite(&Dflfile,sizeof(struct DFLFILE),1,fp)==0)
goto wdfl_errexit;
fclose(fp);
return TRUE;
wdfl_errexit:
dp_errmes("書き込みエラーです.");
printf("errno=%d\n",errno);
fclose(fp);
return FALSE;
}
static bool dp_readdefault(void)
{
FILE *fp = fopen(Dflfilename,"rb");
char buf[sizeof(Dfl_header)];
int c; /* getc()の仕様に合わせてint型 */
unsigned i;
if (fp==NULL)
return FALSE;
buf[sizeof(Dfl_header)-1] = '\0';
if ( fread(buf,sizeof(char),sizeof(Dfl_header)-1,fp) < sizeof(Dfl_header)-1
|| strcmp(Dfl_header,buf) )
{
dp_errmes("定義ファイルヘッダが不正です");
goto rdfl_exit;
}
i = 0;
while ((c=getc(fp))!=EOF)
{
if (c==0x1a)
{
buf[i] = '\0';
break;
}
else
buf[i++] = (char)c;
}
if (c==EOF || (c=dpatoi(buf))==DPATOI_ERROR)
{
dp_errmes("定義ファイルのバージョンが不正です");
goto rdfl_exit;
}
/*
* else if (c<DFLVER_MAJOR*100)
* {
* dp_errmes("\a定義ファイルのバージョンが古すぎます. SETDFLユーティリティで"
* "新しいものに変換してください.");
* goto rdfl_exit;
* }
*/
else if (c>=(DFLVER_MAJOR+1)*100)
{
dp_errmes("\a定義ファイルのバージョンが新しすぎます. 新版ソフトを入手してください.");
goto rdfl_exit;
}
fread(&Dflfile,sizeof(struct DFLFILE),1,fp);
fclose(fp);
return TRUE;
rdfl_exit:
fclose(fp);
return FALSE;
}
/*---------------------------------------------------------------------------*/
void dflfile_init(char *argv0)
{
char *p;
strcpy(Dflfilename,argv0);
p = jstrrchr(Dflfilename,'\\');
strcpy(p+1,"DPRINT.DFL");
dp_readdefault();
}
/*---------------------------------------------------------------------------*/
static void putstatus(void)
{
static char ERASELINE[] = "\033[%u;1f\033[2K";
int i;
for (i=13 ; i<=22 ; i++)
printf(ERASELINE,i);
printf( "\033[%d;1f\033[37m"
"空きメモリ : \033[33m%7ld \033[37mバイト\n"
"MS-DOSバージョン : \033[33m%u.%02u\033[37m\n",
SYSLINE_START,farcoreleft(),_osmajor,_osminor);
if (dp_getch()==EXTKEY_H)
dp_getch();
for (i=13 ; i<=22 ; i++)
printf(ERASELINE,i);
}
void dp_othersmenu(void)
{
static struct MENUDAT menu[] =
{
{'D',"更新","定義ファイルを更新します"},
{'S',"現在の状態","現在の各種状態を表示します"},
{'L',"デフォルトに戻す","定義ファイルを読み込み、設定をデフォルトに戻します"},
};
int a;
othersmenu_rep:
a = dp_menuselect("F8:その他",3,menu);
switch (a)
{
case -1: return;
case 0:
if (dp_writedefault())
dp_errmes("定義ファイルを更新しました.");
break;
case 1:
putstatus();
break;
case 2:
if (dp_readdefault())
dp_errmes("定義ファイルを読み込みました.");
break;
}
goto othersmenu_rep;
}